<?php

class Notificacion {
//<editor-fold defaultstate="collapsed" desc="Constantes">
  const NOMBRE_ENTIDAD = "Notificacion";
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Campos">
  private $_id;
  private $_titulo;
  private $_descripcion;
  private $_controlHtmlAsociado;
  private $_paginaAsociada;
  private $_fechaInicio;
  private $_fechaTermino;
  private $_posicion;
  private $_ajusteTop;
  private $_ajusteLeft;
  private $_skin;
  private $_width;
  private $_recordarCada;
  private $_activo;
  private $_existe;
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Propiedades">
  public function getId() { return $this->_id; }
  public function setId($value) { $this->_id = $value; }

  public function getTitulo() { return $this->_titulo; }
  public function setTitulo($value) { $this->_titulo = $value; }

  public function getDescripcion() { return $this->_descripcion; }
  public function setDescripcion($value) { $this->_descripcion = $value; }

  public function getControlHtmlAsociado() { return $this->_controlHtmlAsociado; }
  public function setControlHtmlAsociado($value) { $this->_controlHtmlAsociado = $value; }

  public function getPaginaAsociada() { return $this->_paginaAsociada; }
  public function setPaginaAsociada($value) { $this->_paginaAsociada = $value; }

  public function getFechaInicio() { return $this->_fechaInicio; }
  public function setFechaInicio($value) { $this->_fechaInicio = $value; }

  public function getFechaTermino() { return $this->_fechaTermino; }
  public function setFechaTermino($value) { $this->_fechaTermino = $value; }

  public function getPosicion() { return $this->_posicion; }
  public function setPosicion($value) { $this->_posicion = $value; }

  public function getAjusteTop() { return $this->_ajusteTop; }
  public function setAjusteTop($value) { $this->_ajusteTop = $value; }

  public function getAjusteLeft() { return $this->_ajusteLeft; }
  public function setAjusteLeft($value) { $this->_ajusteLeft = $value; }

  public function getSkin() { return $this->_skin; }
  public function setSkin($value) { $this->_skin = $value; }

  public function getWidth() { return $this->_width; }
  public function setWidth($value) { $this->_width = $value; }

  public function getRecordarCada() { return $this->_recordarCada; }
  public function setRecordarCada($value) { $this->_recordarCada = $value; }

  public function getActivo() { return $this->_activo; }
  public function setActivo($value) { $this->_activo = $value; }

  public function getExiste() { return $this->_existe; }
  public function setExiste($value) { $this->_existe = $value; }
//</editor-fold>
  
//<editor-fold defaultstate="collapsed" desc="Metodos Publicos">
  /**
   * constructor
   * @author VSR, 10/04/2011
   */
  public function __construct($id = -1) {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_ObtenerPorId({id});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $id, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      if ($totalRegistros > 0) {
        $row = $arr[0];
        $this->_id = ( is_null($row["Id"]) ) ? -1 : $row["Id"];
        $this->_titulo = ( is_null($row["Titulo"]) ) ? "" : $row["Titulo"];
        $this->_descripcion = ( is_null($row["Descripcion"]) ) ? "" : $row["Descripcion"];
        $this->_controlHtmlAsociado = ( is_null($row["ControlHtmlAsociado"]) ) ? "" : $row["ControlHtmlAsociado"];
        $this->_paginaAsociada = ( is_null($row["PaginaAsociada"]) ) ? "" : $row["PaginaAsociada"];
        $this->_fechaInicio = ( is_null($row["FechaInicio"]) ) ? "" : $row["FechaInicio"];
        $this->_fechaTermino = ( is_null($row["FechaTermino"]) ) ? "" : $row["FechaTermino"];
        $this->_posicion = ( is_null($row["Posicion"]) ) ? "" : $row["Posicion"];
        $this->_ajusteTop = ( is_null($row["AjusteTop"]) ) ? "" : $row["AjusteTop"];
        $this->_ajusteLeft = ( is_null($row["AjusteLeft"]) ) ? "" : $row["AjusteLeft"];
        $this->_skin = ( is_null($row["Skin"]) ) ? "" : $row["Skin"];
        $this->_width = ( is_null($row["Width"]) ) ? "" : $row["Width"];
        $this->_recordarCada = ( is_null($row["RecordarCada"]) ) ? 0 : $row["RecordarCada"];
        $this->_activo = ( is_null($row["Activo"]) ) ? 0 : $row["Activo"];
        $this->_existe = ($this->_id == -1) ? 0 : 1;
      } else {
        $this->_id = -1;
        $this->_titulo = "";
        $this->_descripcion = "";
        $this->_controlHtmlAsociado = "";
        $this->_paginaAsociada = "";
        $this->_fechaInicio = "";
        $this->_fechaTermino = "";
        $this->_posicion = "";
        $this->_ajusteTop = "";
        $this->_ajusteLeft = "";
        $this->_skin = "";
        $this->_width = "";
        $this->_recordarCada = 0;
        $this->_activo = 0;
        $this->_existe = 0;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * crea o actualiza un registro
   * @author VSR, 10/04/2011
   */
  public function grabar() {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_Grabar({id},'{titulo}','{descripcion}','{controlHtmlAsociado}','{paginaAsociada}','{fechaInicio}','{fechaTermino}','{posicion}','{ajusteTop}','{ajusteLeft}','{skin}','{width}',{recordarCada},{activo});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $this->_id, $sp);
      $sp = str_replace("{titulo}", $this->_titulo, $sp);
      $sp = str_replace("{descripcion}", $this->_descripcion, $sp);
      $sp = str_replace("{controlHtmlAsociado}", $this->_controlHtmlAsociado, $sp);
      $sp = str_replace("{paginaAsociada}", $this->_paginaAsociada, $sp);
      $sp = str_replace("{fechaInicio}", $this->_fechaInicio, $sp);
      $sp = str_replace("{fechaTermino}", $this->_fechaTermino, $sp);
      $sp = str_replace("{posicion}", $this->_posicion, $sp);
      $sp = str_replace("{ajusteTop}", $this->_ajusteTop, $sp);
      $sp = str_replace("{ajusteLeft}", $this->_ajusteLeft, $sp);
      $sp = str_replace("{skin}", $this->_skin, $sp);
      $sp = str_replace("{width}", $this->_width, $sp);
      $sp = str_replace("{recordarCada}", $this->_recordarCada, $sp);
      $sp = str_replace("{activo}", $this->_activo, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      if ($totalRegistros > 0) {
        $row = $arr[0];
        $this->_id = $row["Id"];
        $this->_existe = 1;
      } else {
        $this->_id = -1;
        $this->_existe = 0;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * elimina un registro
   * @author VSR, 10/04/2011
   */
  public function eliminar() {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_Eliminar({id});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $this->_id, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      $this->_id = -1;
      $this->_existe = 0;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * destructor
   * @author VSR, 10/04/2011
   */
  public function  __destruct() {
   // destruye el objeto
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Compartidos">
  /**
   * obtiene listado de notificaciones
   * @param <type> $idUsuario
   * @param <type> $filtroTitulo
   * @param <type> $filtroDescripcion
   * @param <type> $activo
   * @return string
   * @author VSR, 01/01/2011
   */
  public static function obtenerListadoConFiltro($idUsuario, $filtroTitulo, $filtroDescripcion, $activo, $fechaDesde, $fechaHasta) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_ObtenerListadoConFiltro({idUsuario},'{filtroTitulo}','{filtroDescripcion}',{activo},'{fechaDesde}','{fechaHasta}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idUsuario}", $idUsuario, $sp);
      $sp = str_replace("{filtroTitulo}", $filtroTitulo, $sp);
      $sp = str_replace("{filtroDescripcion}", $filtroDescripcion, $sp);
      $sp = str_replace("{activo}", $activo, $sp);
      $sp = str_replace("{fechaDesde}", $fechaDesde, $sp);
      $sp = str_replace("{fechaHasta}", $fechaHasta, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);

    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * obtiene detalle de la notificacion consultada
   * @param <type> $idNotificacion
   * @return string
   * @author VSR, 01/01/2011
   */
  public static function obtenerDetalle($idNotificacion) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_ObtenerDetalle({idNotificacion});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idNotificacion}", $idNotificacion, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp, Bd::MULTI_QUERY);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * graba los datos de una notificacion
   * @param <type> $idNotificacion
   * @param <type> $titulo
   * @param <type> $descripcion
   * @param <type> $controlHtmlAsociado
   * @param <type> $fechaInicio
   * @param <type> $fechaTermino
   * @param <type> $activo
   * @return string
   * @author VSR, 01/01/2011
   */
  public static function grabarDatos($idNotificacion, $titulo, $descripcion, $controlHtmlAsociado, $fechaInicio,
                                     $fechaTermino, $activo, $skin, $ajusteTop, $ajusteLeft, $ancho, $recordarCada,
                                     $posicion, $listadoIdUsuarios, $paginaAsociada) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_GrabarDatos({idNotificacion},'{titulo}','{descripcion}','{controlHtmlAsociado}','{fechaInicio}','{fechaTermino}',{activo},'{skin}','{ajusteTop}','{ajusteLeft}','{ancho}',{recordarCada},'{posicion}','{listadoIdUsuarios}','{paginaAsociada}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idNotificacion}", $idNotificacion, $sp);
      $sp = str_replace("{titulo}", $titulo, $sp);
      $sp = str_replace("{descripcion}", $descripcion, $sp);
      $sp = str_replace("{controlHtmlAsociado}", $controlHtmlAsociado, $sp);
      $sp = str_replace("{fechaInicio}", $fechaInicio, $sp);
      $sp = str_replace("{fechaTermino}", $fechaTermino, $sp);
      $sp = str_replace("{activo}", $activo, $sp);
      $sp = str_replace("{skin}", $skin, $sp);
      $sp = str_replace("{ajusteTop}", $ajusteTop, $sp);
      $sp = str_replace("{ajusteLeft}", $ajusteLeft, $sp);
      $sp = str_replace("{ancho}", $ancho, $sp);
      $sp = str_replace("{recordarCada}", $recordarCada, $sp);
      $sp = str_replace("{posicion}", $posicion, $sp);
      $sp = str_replace("{listadoIdUsuarios}", $listadoIdUsuarios, $sp);
      $sp = str_replace("{paginaAsociada}", $paginaAsociada, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * elimina una notificacion
   * @param <type> $idNotificacion
   * @return <type>
   * @author VSR, 01/01/2011
   */
  public static function eliminarDatos($idNotificacion) {
    $retorno = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_EliminarDatos({idNotificacion});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idNotificacion}", $idNotificacion, $sp);

      //ejecuta procedimiento
      $retorno = Bd::exec($sp, Bd::SCALAR,"Status");
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

  /**
   * obtiene el listado de notificaciones a mostrar al usuario conectado
   * @param <type> $idUsuario
   * @param <type> $esSuper
   * @return string
   */
  public static function obtenerListadoMostrar($idUsuario, $esSuper, $paginaActual) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_ObtenerListadoMostrar({idUsuario}, {esSuper}, '{paginaActual}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idUsuario}", $idUsuario, $sp);
      $sp = str_replace("{esSuper}", $esSuper, $sp);
      $sp = str_replace("{paginaActual}", $paginaActual, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * graba el estado que selecciono el usuario
   * @param <type> $idUsuario
   * @param <type> $idNotificacion
   * @param <type> $estado
   * @return string
   * @author VSR, 11/04/2011
   */
  public static function grabarEstado($idUsuario, $idNotificacion, $estado) {
    $retorno = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_GrabarEstado({idUsuario},{idNotificacion},'{estado}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idUsuario}", $idUsuario, $sp);
      $sp = str_replace("{idNotificacion}", $idNotificacion, $sp);
      $sp = str_replace("{estado}", $estado, $sp);

      //ejecuta procedimiento
      $retorno = Bd::exec($sp, Bd::SCALAR);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

  /**
   * Obtiene Listado de controles html ingresados en notificacion para poder autocompletar la busqueda
   * @param <type> $texto
   * @return string
   * @author VSR, 13/04/2011
   */
  public static function autocompletarControlHtml($texto) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_AutocompletarControlHtml('{texto}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{texto}", $texto, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * obtiene listado de paginas registradas en el sistema para autocompletar
   * @param <type> $texto
   * @return string
   * @author VSR, 17/04/2011
   */
  public static function autocompletarPaginaAsociada($texto) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_AutocompletarPaginaAsociada('{texto}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{texto}", $texto, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * obtiene las estadisticas de una notificacion
   * @param <type> $idPerfil
   * @param <type> $usuariosSeleccionados
   * @return string
   * @author VSR, 18/04/2011
   */
  public static function obtenerEstadistica($idNotificacion, $estado) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_Notificacion_ObtenerEstadistica({idNotificacion},'{estado}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idNotificacion}", $idNotificacion, $sp);
      $sp = str_replace("{estado}", $estado, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }




//</editor-fold>
}
?>

